#pragma once

#pragma pack(push,8)
#include <variant>
#pragma pack(pop)

#include "AxisStateMachine.h"


namespace Axis {

class AxisModel {
public:
    AxisModel();
    void PowerOn();
    void PowerOff();

    double cmd_position() const { return cmd_position_; };
    double actual_position() const { return actual_position_; };
    double cmd_velocity() const { return cmd_velocity_; };
    double actual_velocity() const { return actual_velocity_; };
    double cmd_torque() const { return cmd_torque_; };
    double actual_torque() const { return actual_torque_; }

    void SetCmdPosition(double cmd_position) { cmd_position_ = cmd_position; };
    void SetCmdVelocity(double cmd_velocity) { cmd_velocity_ = cmd_velocity; };
    void SetCmdTorque(double cmd_torque) { cmd_torque_ = cmd_torque; };

private:
    // sml::sm<AxisStateMachine> sm_;
    double cmd_position_{};
    double actual_position_{};
    double cmd_velocity_{};
    double actual_velocity_{};
    double cmd_torque_{};
    double actual_torque_{};
};

}  // namespace Axis